#define CATCHESIZE 64
struct Node
{
	Node *next;
	int num = 0;
	char padding[CATCHESIZE-sizeof(Node*)-sizeof(int)];	


};


#define N1(node) node=node->next;
#define N2(node) N1(node);N1(node);
#define N4(node) N2(node);N2(node);
#define N8(node) N4(node);N4(node);
#define N16(node) N8(node);N8(node);
#define N32(node) N16(node);N16(node);
#define N64(node) N32(node);N32(node);
#define N128(node) N64(node);N64(node);
#define N256(node) N128(node);N128(node);
#define N512(node) N256(node);N256(node);
#define N1024(node) N512(node);N512(node);


const Node* test(int M,const std::vector<Node> & c)
{

	const Node* node = &c[0];
	for (int i = 0; i < M; i++)
	{
		const int sizes = c.size() / 1024;
		for (int j = 0; j < sizes; j++)
		{
			N1024(node);

		}
	}
	return node;

}


int main()
{
	const int N = 1024 * 1024 * 16;
	vector<Node> vem(N);
	for (int i = 0; i < N - 1; i++)
	{
		vem[i].next = &vem[i + 1];
		vem[i].next->num = i;
	}
	//N1024(&vem[0]);
	const Node* node1 = &vem[0];
	N1024(node1);
	vem[N - 1].next = &vem[0];
	const Node*node =test(10,vem);
}